const app = getApp()

// pages/chat/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isConnect: false,
    // 输入框输入的内容
    value: "",
    list: [],
    userName: ""
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 先确定能够拿到跳转的参数
    console.log(options.id);
    app.globalData.userInfoPromise.then(res => {
      const userInfo = app.globalData.user;
      // 数据放在this上，方便后续使用
      // 用户名
      this.userName = userInfo.loginName;
      this.setData({
        userName: this.userName
      })
      // 分组id，标示聊天室的,使用帖子id作为groupId,来区分不同帖子的聊天室
      this.groupId = "web09" + options.id
      this.nickName = userInfo.userName
      this.avatar = userInfo.avatar
      // 1. 建立链接（需要配置域名）
      wx.connectSocket({
        url: `wss://showme.myhope365.com/websocketChat?username=${this.userName}&password=123&courseId=${this.groupId}&nickName=${this.nickName}&avatar=${this.avatar}`,
      })
      wx.onSocketOpen((result) => {
        // 当链接建立成功之后执行
        this.setData({
          isConnect: true
        })
        // 我们就可以给socket发送消息，也可以socket
        // 获取历史消息，需要向服务端，发一个获取历史消息的请求
        // 通过这个api发送历史消息
        const getHistoryMsg = {
          cmd: 19, // 命令 
          type: 1, // 类型 固定值
          groupId: this.groupId, //  分组的id
          userId: this.userName // 用户id（这里可以用loginName）
        }
        // 1. 发送获取历史消息指令
        wx.sendSocketMessage({
          data: JSON.stringify(getHistoryMsg),
        })
        // 做一个心跳检测，定时向服务端发送消息
        this.intervalId = setInterval(() => {
          wx.sendSocketMessage({
            data: JSON.stringify({
              "cmd": 13,
              "hbbyte": "-127"
            }),
          })
        }, 5000);
      })
      // 接收消息
      wx.onSocketMessage((result) => {
        console.log("有新消息进来了");
        // 需要第一件事就是初始化历史消息
        // 判断，如果有新消息进来，就把新消息展示出来
        const data = JSON.parse(result.data)
        console.log(data);
        if (data.command == 11) {
          // 代表有新消息
          this.data.list.push(data.data)
          this.setData({
            list: this.data.list
          })
        }
        // 一旦回的消息是command = 20 并且 code = 10018 代表获取历史消息成功
        if (data.command == 20 && data.code == 10018) {
          // 1. 历史消息进来了,web09786
          this.setData({
            // 把当前分组的历史消息取出来，设置到list上
            // groups里有多个聊天室的数据，只取当前分组的就可以了
            list: data.data.groups[this.groupId]
          })
        }
      })
    })

  },
  onUnload() {
    // 需要主动关闭socket连接
    wx.closeSocket()
    clearInterval(this.intervalId)
  },
  // 发送消息的事件
  sendMsg() {
    // 向服务端发送消息
    if (!this.data.isConnect) {
      wx.showToast({
        title: '连接中，请稍等...',
        icon: "none"
      })
      return;
    }

    if (!this.data.value) {
      wx.showToast({
        title: '请输入内容',
        icon: "none"
      })
      return;
    }
    this.sendChatMessage(this.data.value,'1')

  },

  sendChatMessage(content,type) {
    // 发送消息
    const msgBody = {
      from: this.userName, // 发送人，当前用户的用户名
      createTime: new Date().getTime(), // 发送时间
      cmd: 11, // 命令固定内容
      group_id: this.groupId, // 分组id。  想要发送到哪个组里
      chatType: 1, //  聊天类型 固定内容
      msgType: 0, // 消息类型 固定内容
      content , // 消息内容，自己设计结构，比如你想发送图片（图片上传的接口）
      nickName: this.nickName, // 用户昵称
      avatar: this.avatar, // 用户头像
      type // 消息类型。 你可以自己设计，发送过去是什么，返回的就是什么（1: 普通文本 2: 图片 3：点赞 4， 送花）
    }

    // 向服务端发送数据
    wx.sendSocketMessage({
      data: JSON.stringify(msgBody),
    })
  },

  sendImg() {
    // 发送图片消息
    wx.chooseImage({
      count: 1,
      success: res => {
        // 请求的时候没有带上cookie
        wx.uploadFile({
          // 通过选择图片api拿到的图片地址
          filePath: res.tempFilePaths[0],
          // 接口文档会告诉我们
          name: 'file',
          formData: {
            fileUseForEnum: "DEFAULT"
          },
          url: 'https://showme.myhope365.com/api/nos/upload/image',
          // 需要为请求加上cookie
          header: {
            "cookie": wx.getStorageSync("cookie"),
          },
          success: uploadRes => {
            const data = JSON.parse(uploadRes.data)
            console.log(data.url);
            // 发送消息
            this.sendChatMessage(data.url,'2')
          }
        })
      }
    })
  }
})